package com.zyh.thread.demo4;

/**
 * @Author zyh
 * @Date 2024/8/8 14:44
 * @Description 创建一个桌子类
 */

public class Stack {
    private Product product;//商品
    private Boolean flag;//标记

    public Stack() {
    }

    public Stack(Product product, Boolean flag) {
        this.product = product;
        this.flag = flag;
    }

    /*
        生产商品的方法
     */
    public synchronized void create(String name, String color) {
        while (flag) {//说明桌子有商品，则生产线程进行阻塞
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //生产商品
        product.setName(name);
        product.setColor(color);
        System.out.println(Thread.currentThread().getName() + "生产了：" + product.getColor() + "的" + product.getName());
        //生产后桌子有商品，将flag改为true
        flag = true;
        //唤醒消费线程
        this.notifyAll();
    }

    /*
        消费商品的方法
     */
    public synchronized void eat() {
        while (flag == false) {//没有商品就等待
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        //有商品就消费
        System.out.println(Thread.currentThread().getName() + "消费了：" + product.getColor() + "的" + product.getName());
        //消费后
        flag = false;
        //唤醒生产者线程
        this.notifyAll();
    }
}
